import RPi.GPIO as GPIO
import time

import urllib
import urllib.request
import hashlib


#不能命名为email.py，与库冲突了

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def md5(str):
    import hashlib
    m = hashlib.md5()
    m.update(str.encode("utf8"))
    return m.hexdigest()

def send():

    #email

    sender_email = '2955992336@qq.com'  # 发件人邮箱地址
    sender_password = 'dtqrgjuvctwvdcfj'  # QQ 邮箱授权码，不是登录密码
    recipient_email = '2076925659@qq.com'  # 收件人邮箱地址
    subject = '紧急报警信息'  # 邮件主题
    message = '【智瞳科技】盲杖使用者按下了紧急报警按钮！可以在此链接下查看地理位置：http://192.168.43.117:5009。可以在此链接查看实时监控：http://192.168.43.117:5008/video。或者可以打开盲杖app进行查看并导航。'  # 邮件内容
    # 设置邮件内容
    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = recipient_email
    msg['Subject'] = subject

    # 添加邮件正文
    msg.attach(MIMEText(message, 'plain'))

    # 连接 SMTP 服务器
    server = smtplib.SMTP_SSL('smtp.qq.com', 465)  # 使用 SSL 连接 QQ 邮箱的 SMTP 服务器

    # 登录邮箱账号
    server.login(sender_email, sender_password)

    # 发送邮件
    server.send_message(msg)

    # 关闭连接
    server.quit()
    
    
    #message
    statusStr = {
        '0': '短信发送成功',
        '-1': '参数不全',
        '-2': '服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间',
        '30': '密码错误',
        '40': '账号不存在',
        '41': '余额不足',
        '42': '账户已过期',
        '43': 'IP地址限制',
        '50': '内容含有敏感词'
    }
 
    smsapi = "http://api.smsbao.com/"
    # 短信平台账号
    user = 'lv_250'
    # 短信平台密码
    password = md5('lv2955992336')
    # 要发送的短信内容
    content = '【智瞳科技】您的家人按下了紧急报警按钮！'
    # 要发送短信的手机号码
    phone = '18864067309'
     
    data = urllib.parse.urlencode({'u': user, 'p': password, 'm': phone, 'c': content})
    send_url = smsapi + 'sms?' + data
    response = urllib.request.urlopen(send_url)
    the_page = response.read().decode('utf-8')
    print (statusStr[the_page])
    


# 设置GPIO模式为BCM
GPIO.setmode(GPIO.BCM)

# 定义引脚号
PIN_NUMBER = 18

# 设置引脚为输入模式，并且设置上拉电阻
GPIO.setup(PIN_NUMBER, GPIO.IN, pull_up_down=GPIO.PUD_UP)

try:
    previous_state = GPIO.input(PIN_NUMBER)

    while True:
        current_state = GPIO.input(PIN_NUMBER)

        # 检测到引脚电平变化
        if current_state != previous_state:
            send()
        # 等待一段时间后重新检测
        time.sleep(0.1)

except KeyboardInterrupt:
    print("程序被终止")

finally:
    GPIO.cleanup()  # 清理GPIO状态
